﻿using GalaSoft.MvvmLight;
using SGT.Model;
using GalaSoft.MvvmLight.Messaging;
using System;
using System.Collections.ObjectModel;
using GalaSoft.MvvmLight.Command;

namespace SGT.ViewModel
{
    /// <summary>
    /// This class contains properties that a View can data bind to.
    /// <para>
    /// Use the <strong>mvvminpc</strong> snippet to add bindable properties to this ViewModel.
    /// </para>
    /// <para>
    /// You can also use Blend to data bind with the tool's support.
    /// </para>
    /// <para>
    /// See http://www.galasoft.ch/mvvm/getstarted
    /// </para>
    /// </summary>
    public class RemitoViewModel : ViewModelBase
    {
        /// <summary>
        /// Initializes a new instance of the RemitoViewModel class.
        /// </summary>
        /// 
        private Sector _SectorEnUso;
        private Deposito _DepositoEnUso;
        private DateTime _Fecha;
        private string _RemitoExterno;
        private Proveedor _ProveedorMercaderia;
        private float _PesoReal;
        private ObservableCollection<Proveedor> _Proveedores;
        private ObservableCollection<Remito> _Remitos;
        private string _Notas;
        private Remito _RemitoEnPantalla;
        public RelayCommand InsertarRemito { get; private set; }



        Messenger mes = Messenger.Default;

        public Sector SectorEnUso
        {
            get { return _SectorEnUso; }
            set
            {
                _SectorEnUso = value;
                RaisePropertyChanged("SectorEnUso");
            }
        }

        public Deposito DepositoEnUso
        {
            get { return _DepositoEnUso; }
            set
            {
                _DepositoEnUso = value;
                RaisePropertyChanged("DepositoEnUso");
            }
        }


        public DateTime Fecha
        {
            get { return _Fecha; }
            set
            {
                _Fecha = value;
                RaisePropertyChanged("Fecha");
            }
        }
        public string RemitoExterno
        {
            get { return _RemitoExterno; }
            set
            {
                _RemitoExterno = value;
                RaisePropertyChanged("RemitoExterno");
            }
        }

        public Proveedor ProveedorMercaderia
        {
            get { return _ProveedorMercaderia; }
            set
            {
                _ProveedorMercaderia = value;
                RaisePropertyChanged("ProveedorMercaderia");
            }
        }

        public ObservableCollection<Proveedor> Proveedores
        {
            get { return _Proveedores; }
            set
            {
                _Proveedores = value;
                RaisePropertyChanged("Proveedores");
            }
        }

        public float PesoReal
        {
            get { return _PesoReal; }
            set
            {
                _PesoReal = value;
                RaisePropertyChanged("PesoReal");
            }
        }

        public string Notas
        {
            get { return _Notas; }
            set
            {
                _Notas = value;
                RaisePropertyChanged("Notas");
            }
        }
        public ObservableCollection<Remito> Remitos
        {
            get { return _Remitos; }
            set
            {
                _Remitos = value;
                RaisePropertyChanged("Remitos");
            }
        }
        public Remito RemitoEnPantalla
        {
            get { return _RemitoEnPantalla; }
            set
            {
                _RemitoEnPantalla = value;
                RaisePropertyChanged("RemitoEnPantalla");
            }
        }





        public RemitoViewModel()
        {
            if (IsInDesignMode)
            {
            ////    // Code runs in Blend --> create design time data.
            }
            else
            {
                Fecha = DateTime.Now;
                Messenger.Default.Register<Sector>(this, elSector => SectorEnUso = elSector);
                Messenger.Default.Register<Mensaje>(this, msg => procesarMensaje(msg));
                SetDepositoEnUso();
                inicializarFormulario();
                InsertarRemito = new RelayCommand(GuardarRemito);
                cargarRemitos();
        
            }
        }

        


        private void SetDepositoEnUso()
        {
            DepositoEnUso = ManejadorDepositos.GetDepositoActual();
        }


        private void inicializarFormulario()
        {
            RemitoEnPantalla = new Remito();
            Proveedores = Controlador.GetProveedores();
            RemitoEnPantalla.Fecha = Fecha;
            
            
            
        }

        private void cargarRemitos()
        {
            if (Remitos == null)
                _Remitos = new ObservableCollection<Remito>();
            Remitos.Clear();
            Remitos = ManejadorRemitos.GetRemitos();
        }

        private void cargarRemitos(int id)
        {
            if (Remitos == null)
                _Remitos = new ObservableCollection<Remito>();
            Remitos.Clear();
            Remitos = ManejadorRemitos.GetRemitos(id);
        }


        private void GuardarRemito()
        {
            ManejadorRemitos.InsertarRemito(RemitoEnPantalla);
            cargarRemitos(RemitoEnPantalla.SectorUsado.SectorID);
            Mensaje txt = new Mensaje();
            txt.texto = "RecargarGraficas";
            //Messenger.Default.Send<Mensaje, PortadaViewModel>(txt);
            Messenger.Default.Send<Mensaje, MainViewModel>(txt);
        }
        private void procesarMensaje(Mensaje msg)
        {
            if (msg.texto.CompareTo("RecagarDeposito") == 0)
                SetDepositoEnUso();
            if (msg.texto.CompareTo("GridRemito") == 0)
                cargarRemitos(msg.par1);
        }

        public override void Cleanup()
        {
        ////    // Clean own resources if needed

            base.Cleanup();
        }
    }
}